package br.com.tcc.dao;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;

import br.com.tcc.model.Produto;

public class ProdutoDao {
	private EntityManagerFactory emf;

	public ProdutoDao() {
		emf = Persistence.createEntityManagerFactory("persistencia");
	}
	
	public boolean adicionar(Produto produto) {
		EntityManager em = emf.createEntityManager();
		boolean retorno = true;
		try{
			em.getTransaction().begin();
			em.persist(produto);
			em.getTransaction().commit();
		}catch(Exception e){
			em.getTransaction().rollback();
			e.printStackTrace();
			retorno = false;
			em.close();
		}finally{
			em.close();
		}
	   	return retorno;
	}

	public List<Produto> listarProdutos() {
		List<Produto> retorno = null;
		EntityManager em = emf.createEntityManager();
		
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("select p from Produto p order by nome");
		   	retorno = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		return retorno;
	}
	
	public Produto buscarCodigoBarra(String codigoBarra) {
		Produto retorno = null;
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("select p from Produto p where p.codigoBarra=:codigoBarra");
		   	q.setParameter("codigoBarra", codigoBarra);
		   	retorno = (Produto) q.getSingleResult();
	   	
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		
		return retorno;
	}

	//Buscar produtos pelo id da Sub categoria
	public List<Produto> buscarSubCategorias(int idSubCategoria) {
		List<Produto> retorno = null;
		EntityManager em = emf.createEntityManager();
		
		try{
		   	em.getTransaction().begin();
		   	Query q = em.createQuery("select p from Produto p where p.subCategoria.idSubCategoria = :idSubCategoria");
		   	q.setParameter("idSubCategoria", idSubCategoria);
		   	retorno = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		return retorno;
	}

	public List<Produto> pesquisar(String texto) {
		List<Produto> retorno = null;
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	
		   	Query q = em.createQuery("select p from Produto p " +
		   							 "where p.nome like '%"+texto.trim()+"%' ");
		   	
		   	System.out.println("procurando por: " +texto.trim());
		   	
		   	retorno = q.getResultList();
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		return retorno;
	}
	
	public Produto buscarId(int id){
		Produto retorno = null;
		EntityManager em = emf.createEntityManager();
		try{
		   	em.getTransaction().begin();
		   	retorno = em.find(Produto.class, id);
		}catch (NoResultException e) {
			System.out.println("sem registro");
		}catch (Exception e) {
			e.printStackTrace();
		}finally{
			em.close();
		}
		return retorno;
	}
	
	
}